home *** CD-ROM | disk | FTP | other *** search
- /*
- * Enumerate.c
- */
-
- #include "SimpleDrag.h"
-
-
-
- static pascal Boolean myForEachDirEnumSpec (long clientData, const DirEnumSpec *enumSpec);
-
- #define kEnumBufferSize (4096) /* Working data buffer */
-
-
- /*****************************************************************
- * DoEnumerateGet
- *
- *
- *****************************************************************/
-
- OSErr DoEnumerateGet(short dsRefNum,
- long clientData,
- RStringPtr recordType,
- AuthIdentity identity)
- {
- OSErr err;
- RStringPtr typeList[1];
- DirParamBlock dirParamBlock;
- Ptr buffer;
-
- #define GET (dirParamBlock.enumerateGetPB)
- #define PARSE (dirParamBlock.enumerateParsePB)
-
-
- buffer = NewPtr(kEnumBufferSize);
- if (buffer == NULL)
- err = MemError();
- else
- {
- GET.dsRefNum = dsRefNum;
- GET.identity = 0;
-
- GET.aRLI = NULL; /* ignored if non-zero dsRefNum is passed */
- GET.startingPoint = 0;
- GET.sortBy = kSortByType;
- GET.sortDirection = kSortForwards;
- typeList[0] = recordType;
- GET.typesList = &typeList;
- GET.typeCount = 1;
- GET.enumFlags = kEnumPseudonymMask;
- GET.includeStartingPoint = true;
- GET.matchNameHow = kMatchAll;
- GET.matchTypeHow = kExactMatch;
- GET.getBuffer = buffer;
- GET.getBufferSize = kEnumBufferSize;
- err = DirEnumerateGet (&dirParamBlock, false);
-
- if (err == noErr || err == kOCEMoreData)
- {
- PARSE.clientData = clientData;
- PARSE.eachEnumSpec = myForEachDirEnumSpec;
-
- err = DirEnumerateParse (&dirParamBlock, false);
- }
- }
-
- return (err);
- #undef GET
- #undef PARSE
-
- }
-
- /*****************************************************************
- * myForEachDirEnumSpec
- *
- *
- *****************************************************************/
-
- static pascal Boolean myForEachDirEnumSpec (long clientData,
- const DirEnumSpec *enumSpec)
- {
- OSErr err;
-
- if ((enumSpec->enumFlag & kEnumPseudonymMask))
- {
- err = OCECopyLocalRecordID(&enumSpec->u.recordIdentifier,
- (LocalRecordIDPtr)clientData);
-
- return (true); /* stop, we found it */
- }
- else
- return (false); /* get next one */
- }
-